#ifndef __MAX31865_H
#define __MAX31865_H

#include "spi.h"
#include <math.h>

// MAX31865引脚
#define MAX31865_CS_GFIO_PIN        GPIO_NUM_7
// SPI主机  
#define SPI_HOST                    SPI2_HOST
// ESP_LOGI的TAG        
#define TAG                         "MAX31865"
// PT1000 0℃时的电阻值      
#define R0                          1000
// 参考电阻值       
#define R_REF                       4300
// 计算参数     
#define Ka                          3.9083e-3f
#define Kb                          -5.775e-7f
#define Kc                          -4.183e-12f

// MAX31865寄存器地址
#define MAX31865_REG_CONFIG         0x00               // 配置寄存器
#define MAX31865_REG_RTD_MSB        0x01               // 
#define MAX31865_REG_RTD_LSB        0x02               //
#define MAX31865_REG_HFT_MSB        0x03               //
#define MAX31865_REG_HFT_LSB        0x04               //
#define MAX31865_REG_LFT_MSB        0x05               //
#define MAX31865_REG_LFT_LSB        0x06               //
#define MAX31865_REG_FAULT          0x07               //

// MAX31865寄存器位
#define MAX31865_CONFIG_BIAS        (1 << 7)    // 使能转换
#define MAX31865_CONFIG_CONVERSION  (1 << 6)    // 转换模式
#define MAX31865_CONFIG_1SHOT       (1 << 5)    // 电阻测试
#define MAX31865_CONFIG_3WIRE       (1 << 4)    // 线制控制 0:2/4线 1:三线
#define MAX31865_CONFIG_FAULT_CYCLE (1 << 2)    // 故障检测周期
#define MAX31865_CONFIG_FAULT_STAT  (1 << 1)    // 故障清零
#define MAX31865_CONFIG_FILTER_50HZ (1 << 0)    // 滤波器频率

// 函数声明
spi_device_handle_t max31865_init(uint32_t cs, uint32_t clock,bool vbias,bool autoConvert,bool wire3,bool filter50HZ);
uint8_t max31865_read_register(spi_device_handle_t spi_handle,uint8_t reg_addr);
void max31865_write_register(spi_device_handle_t spi_handle,uint8_t reg_addr, uint8_t data);
float max31865_read_rtd(spi_device_handle_t spi_handle);
float max31865_read_ResistanceToC(float R);
uint8_t max31865_read_fault(spi_device_handle_t spi_handle);


#endif